package modelo.comportamiento;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public class Conciencia implements Comparator<AccionRecomendada>{
	
	protected Map<Integer,Integer> acciones;
	
	protected static int funcionHash(AccionRecomendada accion) {
		return accion.hashCode();
	}
	
	public Conciencia() {
		acciones = new HashMap<Integer, Integer>();
	}
	
	public void registrar(AccionRecomendada accion, Integer prioridad) {
		acciones.put(funcionHash(accion), prioridad);
	}
	
	public void desregistrar(AccionRecomendada accion) {
		acciones.remove(funcionHash(accion));
	}
	
	public int prioridadMinima() {
		return Integer.MIN_VALUE;
	}
	
	public int getPrioridadDe(AccionRecomendada accion) {
		Integer prioridad = acciones.get(funcionHash(accion));
		if (prioridad != null) 
			return prioridad.intValue();
		return prioridadMinima();
	}
	
	public int compararAccionRecomendada(AccionRecomendada a, AccionRecomendada b) {
		int pA = getPrioridadDe(a);
		int pB = getPrioridadDe(b);
		
		int resultado = (pA - pB);
		if (resultado == 0)
			resultado = a.getPrioridad().compareTo(b.getPrioridad());

		return resultado;
	}

	@Override
	public int compare(AccionRecomendada o1, AccionRecomendada o2) {
		return compararAccionRecomendada(o1,o2);
	}	
}
